[网站功能]通过flask

您所在的位置:网站首页 网易邮箱大师 登录邮箱获取验证码失败 [网站功能]通过flask

[网站功能]通过flask

2024-07-13 23:13| 来源: 网络整理| 查看: 265

网站部署到服务器已经一段时间了,但是一直没有添加用户忘记密码功能,本来目标是实现发送短信验证码重置密码的,查了下攻略,twilio好像只能免费发给在twilio验证过的手机号,而且我注册一直失败,转向国内阿里云的短信服务,看了下短信费一条4分5.....略贵。一个穷人就还是先老老实实通过注册邮箱实现密码重置吧。 代码是我在《flask web开发》这本书上看的,很简单,但是要连到163服务器并发送邮件还是遇到了2个问题的,而且邮箱也需要专门设置下,整了蛮久的,所以单写一篇关于怎么用flask通过163发送邮件的文章。依然step by step~

step1:设置163邮箱,获取SMTP登陆授权码

这个flask-mail中有个MAIL_PASSWORD的配置属性,这里不是让填你的邮箱登陆密码的,而是填写我们这一步即将获得的授权码 进入准备作为发件人的邮箱,点击【设置|客户端授权密码】,这里点击开启,会要先验证手机号,然后设置一个新密码并记住它!

开启并获得授权码

step2:配置SMTP

先安装扩展pip install flask-mail 在config文件中添加以下属性

MAIL_SERVER = 'smtp.163.com' MAIL_PORT = 25 MAIL_USERNAME = '[email protected]' MAIL_PASSWORD = os.environ.get('MAIL_PWD')

我看了下网易官方显示支持安全链接和非安全链接两种链接方式。 非安全的就是我配置的这种,配合25端口, 安全的就是MAIL_USE_TLS=True1,配合端口是465,还有一个9XX(忘记了....) 但是我自己测试的是使用TLS连163的SMTP服务器都链接不到...一直报错,SMTPdisconncted之类的错误 所以还是老老实实用25端口吧! 这个要在环境中使用的密码是授权码! 用户就写成这个样子,不要不带163.com!

step3:发送邮件的函数

这个和书里面一样,没啥可说的,直接上代码!

def send_msg(to, title, template, **kwargs): from manage import app msg = Message(title, sender='小猫游园', recipients=to) msg.body = render_template(template+'.txt', **kwargs) msg.html = render_template(template+'.html', **kwargs) thr = Thread(target=send_sync_msg, args=[app, msg]) thr.start() return thr def send_sync_msg(app, msg): with app.app_context(): mail.send(msg)

同样列一下毫无技术含量的模板内容...

您正在进行【小猫游园】的忘记密码操作,您的新密码是 xxxxxx,请使用新密码登陆后,在个人主页【修改密码】

这里需要特别注意几点 1.sender要写成我写的那个样子 2.recipients是个列表 3.本来我设想的是发送一个含username的token的链接,让用户点击直接重置密码的,但是经过测试,163会直接过滤掉链接!!!所以我选择了我这边直接给他改密码,让忘记密码的用户使用默认密码登陆后,再自行修改密码。

step4:发送邮件 #发送邮件 to = [form.email.data] title = '【小猫游园】忘记密码' template = 'forget_pwd' user = User.query.filter_by(email=form.email.data).first() user.password = 'xxxxxx' db.session.add(user) send_msg(to=to, title=title, template=template)

把这个更加没有技术含量的代码列出来的原因是! 邮件的title!!!和body!!! 千千万万不要出行test和测试这个神奇的bug, 如果你用了这2词,你的发送就会碰到smtplib.SMTPDataError: (554, b'DT:SPM 163这个错误!!!

终于发送成功啦~

SMTPSenderrefused 553 第二天发现密码必须发随机密码....昨天傻不拉几的把密码写成了一样的...然后修改后今天测试报错,是因为授权码从环境导入,所以在运行程序前,需要先导入授权码变量

至此~ 希望大家都能开开心心用代码发邮件~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3